package com.masita.ventanas;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;

import com.masita.logica.Cliente;
import com.masita.logica.Ficha;
import com.masita.logica.Reclamo;
import com.masita.logica.Venta;
import com.masita.util.Utilidad;


public class PanelReclamosPendientes extends JPanel implements InterfaceTabla{

	private VentanaPrincipal padre = null;
	
	private Vector reclamos;
	
	// PANEL SUPERIOR *************************************
	private JPanel panelTop = new JPanel();
	
	private JButton bVerReclamo = new JButton("Ver Reclamo");
	private JButton bNuevoReclamo = new JButton("Registrar Reclamo");
	
	// PANEL TABLE ****************************************
	private JScrollPane scrollTabla = new JScrollPane();
	private TablaDatos tabla = new TablaDatos();

	public PanelReclamosPendientes(VentanaPrincipal p){
		super();
		this.padre = p;
		init();
	}
	
	private void init(){
		this.setLayout(new BorderLayout());
		this.cargarPanelTop();
		this.cargarPanelTabla();
		this.cargarReclamos();
		
		JPanel p = new JPanel();
		this.add(p,BorderLayout.EAST);
		p.setPreferredSize(new Dimension(50,20));

		p = new JPanel();
		this.add(p,BorderLayout.WEST);
		p.setPreferredSize(new Dimension(50,20));

		p = new JPanel();
		this.add(p,BorderLayout.SOUTH);
		p.setPreferredSize(new Dimension(50,50));
		
		// SETEOS DE LA TABLA *****************************
		tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tabla.getSelectionModel().
				addListSelectionListener(new javax.swing.event.ListSelectionListener(){
			public void valueChanged(javax.swing.event.ListSelectionEvent e){
				habilitarBotones(tabla.getFilaSeleccionada());
			}
		});
	}
	
	public void cargarPanelTop(){
		this.add(panelTop,BorderLayout.NORTH);
		panelTop.setPreferredSize(new Dimension(530,40));
		
		JPanel separador = new JPanel();
		this.panelTop.add(separador);
		separador.setPreferredSize(new Dimension(80,20));
	
		panelTop.add(bNuevoReclamo);
		bNuevoReclamo.setPreferredSize(new Dimension(120,20));
		bNuevoReclamo.setMargin(new Insets(0,0,0,0));
		bNuevoReclamo.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				nuevoReclamo();
			}
		});

		separador = new JPanel();
		this.panelTop.add(separador);
		separador.setPreferredSize(new Dimension(50,20));
		
		panelTop.add(bVerReclamo);
		bVerReclamo.setPreferredSize(new Dimension(120,20));
		bVerReclamo.setMargin(new Insets(0,0,0,0));
		bVerReclamo.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				cargarFicha(tabla.getFilaSeleccionada());
			}
		});
		bVerReclamo.setEnabled(false);
	}
	
	public void cargarPanelTabla(){
		this.add(scrollTabla,BorderLayout.CENTER);
		scrollTabla.getViewport().add(tabla);
		tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		Vector col = new Vector();
		col.addElement(new String("FECHA RECLAMO"));
		col.addElement(new String("CLIENTE"));
		col.addElement(new String("DNI"));
		col.addElement(new String("FECHA VENTA"));
		col.addElement(new String("DESCRIPCION"));
		col.addElement(new String("CODIGO"));
		col.addElement(new String("TALLE"));
		col.addElement(new String("CANTIDAD"));
		
		this.tabla.cargarColumnas(col);
		int[] w = {100,200,80,100,250,70,70,70};
		this.tabla.setWitdhColumna(w,true);
	}
	
	private void cargarReclamos(){
		
		reclamos = Reclamo.getReclamosPendientes();
						
		Vector filas = new Vector();
		if( reclamos != null ){
			for(int i=0; i<reclamos.size(); i++){
				Vector fila = new Vector();
				Reclamo rec = (Reclamo)reclamos.elementAt(i);
				fila.addElement(Utilidad.getFechaFormato(rec.getFechaReclamo()));
				
				Cliente cli = Ficha.getFicha(rec.getIdFicha()).getCliente();
				fila.addElement(cli.getNombre());
				fila.addElement(cli.getDni());

				Venta venta = rec.getVenta();
				fila.addElement(Utilidad.getFechaFormato(venta.getFechaVenta()));
				fila.addElement(venta.getProducto().getTexto());
				fila.addElement(venta.getProducto().getCodigo()+"");
				fila.addElement(venta.getProducto().getTalle(venta.getIdTalle()).getTalle());
				fila.addElement(rec.getCantidad()+"");
				filas.addElement(fila);
			}			
		}
		
		this.tabla.cargarDatos(filas);	
	}
	
	// HABILITAR LOS BOTONES
	private void habilitarBotones(int i){
		if( i > -1 && i < this.reclamos.size() )
			this.bVerReclamo.setEnabled(true);
		else
			this.bVerReclamo.setEnabled(false);
	}
	
	private void cargarFicha(int i){
		if( i < this.reclamos.size() && i > -1){
			Ficha f = Ficha.getFicha(((Reclamo)this.reclamos.elementAt(i)).getIdFicha());
			if( f != null ){
				// ABRE LA VENTANA FICHAS PARA EL CASO DE VER LA ENTREGA CONDICIONADA
				padre.VFichas(f,VentanaFichas.NUEVO_RECLAMO,
						((Reclamo)this.reclamos.elementAt(i)).getIdReclamo());
			}
		}
	}
	// ABRE LA VENTANA DE FICHAS SELECCIONANDO LA PALETA ENTREGAS CONDICIONADAS
	private void nuevoReclamo(){
		padre.VCargarFicha(VentanaFichas.NUEVO_RECLAMO,0);				
	}
	
	/******************************************************
	 * TODO - VERIFICA SI SE MODIFICARON LOS ESTADOS DE LAS VENTAS
	 * LA VARIABLE ACTUALIZAR_VENTAS SE SETEA A TRUE CUANDO REGISTRO
	 * UNA VENTA EN LA VENTANA FICHAS, Y EL PANELVENTASPENDIENTES
	 * CHEQUEA LA VARIABLE CUANDO OBTIENE EL FOCO *********
	 *****************************************************/ 
	public void actualizarTabla(){
		this.cargarReclamos();
	}
	
	public TablaDatos getTabla(){
		return this.tabla;
	}

}